package 双指针三指针;
import java.util.*;

/**
 * 该类用于计算接雨水的总量。
 * 时间复杂度：O(n)，空间复杂度：O(1)
 */
public class trap {
    /**
     * 计算接雨水的总量。
     * 该方法使用双指针技术，通过比较左右两边的最大高度来计算每个位置能接的雨水量。
     * @param height 表示每个位置的高度数组
     * @return 接雨水的总量
     */
    public int trapWater(int[] height) {
        int n = height.length; // 获取数组长度
        if(n <= 2) return 0; // 如果数组长度小于等于2，无法接雨水
        int lMax = height[0]; // 初始化左边最大高度
        int rMax = height[n - 1]; // 初始化右边最大高度
        int left = 1; // 左指针
        int right = n - 2; // 右指针
        int water = 0; // 初始化接雨水的总量
        while(left <= right) { // 当左指针小于等于右指针时继续循环
            lMax = Math.max(lMax, height[left]); // 更新左边最大高度
            rMax = Math.max(rMax, height[right]); // 更新右边最大高度
            if(lMax < rMax) { // 如果左边最大高度小于右边最大高度
                water += lMax - height[left]; // 计算当前位置能接的雨水量
                left++; // 左指针右移
            } else { // 如果左边最大高度大于等于右边最大高度
                water += rMax - height[right]; // 计算当前位置能接的雨水量
                right--; // 右指针左移
            }
        }
        return water; // 返回接雨水的总量
    }

    /**
     * 主方法，处理输入并输出结果。
     * 该方法从标准输入读取高度数组，并输出接雨水的总量。
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // 创建扫描器对象
        String[] s = sc.nextLine().split(","); // 读取高度数组
        int[] height = new int[s.length]; // 创建高度数组
        for(int i = 0; i < s.length; i++) {
            height[i] = Integer.parseInt(s[i]); // 解析高度数组
        }
        trap tp = new trap(); // 创建对象
        System.out.println(tp.trapWater(height)); // 输出接雨水的总量
        sc.close(); // 关闭扫描器
    }
}
